package com.huilian.iotbox.data.vo;

import com.huilian.iotbox.data.dto.QueryParam;
import com.huilian.iotbox.data.po.Device;
import com.huilian.iotbox.data.po.DeviceItem;
import com.huilian.iotbox.data.po.MerchantBanner;
import lombok.Data;
import lombok.ToString;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Data
@ToString(callSuper = true)
public class DeviceVo extends QueryParam implements Serializable {
    private static final long serialVersionUID = 2194774389606011207L;
    private Integer id;
    /**
     * 设备号
     */
    private String deviceNo;
    /**
     * 别名
     */
    private Integer alias;
    /**
     * 设备类型id
     */
    private Integer deviceTypeId;

    private String password;
    /**
     * 设备厂商类型
     */
    private Integer vendorId;
    /**
     * mqtt服务商
     */
    private Integer serviceProvider;
    /**
     * 场地id，未绑定场地统一用-1
     */
    private Integer merchantStoreId;
    /**
     * 顶级代理id，主要用于生产新设备号时用到
     */
    private Integer agencyId;
    /**
     * 设备交易总金额
     */
    private BigDecimal totalTransactionAmount;
    /**
     * 设备返佣状态  0/null 未返佣  1已返佣
     */
    private Integer rebateStatus;

    /**
     * 产品id
     */
    private Integer productId;
    /**
     * 设备状态：0、下架，1、上架，2、故障，3、未激活，4、解绑，5、维修替换
     */
    private Integer status;
    /**
     * 网络强度
     */
    private Integer networkIntensity;
    /**
     * 最后上报心跳时间
     */
    private Date lastHeartbeat;
    /**
     * 每局多少币
     */
    private Integer rateEach;
    /**
     * 波特率id
     */
    private Integer baudId;
    /**
     * 协议版本：1、旧版，2、新板
     */
    private Integer agreementVersion;
    /**
     * 固件版本号
     */
    private Integer firmwareVersion;
    /**
     * 向外投币电平
     */
    private Integer level;
    /**
     * SIM_ICC_ID(物联卡号)
     */
    private String SIM_ICC_ID;
    /**
     * 脉冲功能开关
     */
    private Boolean pulseSwitchState;
    /**
     * 数据位
     */
    private Integer dataBit;
    /**
     * 校验位
     */
    private Integer parityBit;
    /**
     * 停止位
     */
    private Integer stopBit;
    /**
     * 故障代码，根据厂家设置，默认为0
     */
    private Integer faultCode;
    /**
     * 心跳时间
     */
    private Integer heartbeatTime;
    /**
     * 出礼模式
     */
    private Integer ritualModel;


    /**
     * 套餐有效期时间
     */
    private Integer ncetId;

    private Integer netCardReplaceStatus;

    /**
     * 设备备注名称，方便记忆
     */
    private String remarkName;

    /**
     * 兑币机类型时，是否需要兑币机主板来投币。1：代表外部设备（兑币机主板来投币），0、null和其他：系统来投币。仅支持脉冲投币+纸钞机串口。
     */
    private Boolean isCoinOperated;

    /**
     * 充电费率
     */
    private Long chargingPileRateId;

    /**
     * 自动投币
     */
    private Boolean automaticCoin;

    private Date createTime;

    private Date updateTime;

    private Integer totalDevice;
    /**
     * 在线
     */
    private int onlineCount;
    /**
     * 不在线
     */
    private int offlineCount;

    private String storeName;

    private int totalLineCount;
    /**
     * 脉冲间隔，毫秒。控制出币速度，数值越高就越慢
     */
    private Integer gapLength;
    /**
     * 脉冲长度，毫秒。决定反应时间
     */
    private Integer pulseLength;
    /**
     * 出礼脉冲间隔
     */
    private Integer outgoingGapLength;
    /**
     * 出礼脉冲长度
     */
    private Integer outgoingPulseLength;

    /**
     * 设备集合
     */
    List<Device> list;

    /**
     * 交易成功的总币
     */
    private Integer successCoin;

    /**
     * 设备类型
     **/
    private String deviceTypeName;

    /**
     * 机构全称
     **/
    private String agencyName;
    /**
     * 返佣机构全称
     */
    private String rebateAgencyName;

    /**
     * 登录账号
     **/
    private String username;

    private Integer userId;
    /**
     * 用户名称
     **/
    private String name;
    /**
     * 设备总数
     */
    private Integer deviceNoCount;
    /**
     * 设备在营总数
     */
    private Integer deviceNoDoBusinessCount;
    /**
     * 设备在线总数
     */
    private Integer deviceOnLineCount;
    /**
     * 设备离线总数
     */
    private Integer deviceOffLineCount;
    /**
     * 设备未激活总数
     */
    private Integer deviceInactiveCount;
    /**
     * 设备解绑总数
     */
    private Integer deviceUntieCount;

    /**
     * 设备数
     */
    private Integer deviceCount;

    private List<DeviceVo> deviceList;
    // 分配成功的设备
    private Integer distributionSucceedCount;
    // 分配失败的设备
    private Integer distributionFailCount;

    /**
     * 失败原因
     **/
    private String failReason;

    private List<DeviceVo> distributionFailList;


    /**
     * 累计投币数
     */
    private Integer insertCoinSum;
    /**
     * 累计掉奖数
     */
    private Integer awardSum;
    /**
     * 营收增量
     */
    private Integer revenueIncrement;
    /**
     * 上传时间
     */
    private Date uploadDateTime;

    private BigDecimal totalAmount;

    private Integer consume;
    /**
     * 商品名称
     **/
    private String goodsName;
    /**
     * 投币单价
     */
    private BigDecimal price;
    /**
     * 现有库存
     */
    private Integer existStock;
    /**
     * 备用库存
     */
    private Integer reserveStock;
    /**
     * 预警库存
     */
    private Integer warnStock;
    /**
     * 微信openId
     */
    private String openId;

    /**
     * 出礼类型 1 会出礼 2 不会出礼
     */
    private Integer giftType;
    /**
     * 是否启用库存预警
     */
    private Boolean enableWarnStock;

    /**
     * mqtt消息业务id
     */
    private String mqttMessageBusinessId;
    /**
     * 扫码mqtt消息业务id
     */
    private String scanCodeMqttMessageId;
    /**
     * 纸钞mqtt消息业务id
     */
    private String billMqttMessageId;
    private Integer scanCodeCmdId;
    private Integer billCmdId;
    private Integer cmdId;

    private String code;
    private String scanCode;
    private String billCode;

    /**
     * 总分支数
     */
    private Integer totalNumberPosition;
    private List<ChargingPileRateStageVo> chargingPileRateStageVoList;
    /**
     * 最低消费，元
     */
    private BigDecimal minimumCharge;
    /**
     * 充满自停预付费用，元
     */
    private BigDecimal fullPrepaidAmount;

    private List<MerchantBanner> merchantBannerList;
    /**
     * 场地自动投币
     */
    private Boolean merchantAutomaticCoin;
    /**
     * 是否开启兑换商城
     */
    private Boolean isExchange;
    /**
     * 套餐计量单位，如：次、分钟、圈
     */
    private String measuringUnit;
    /**
     * 游戏时间
     */
    private Integer gameTime;
    /**
     * cpuId
     */
    private String cpuId;
    /**
     * 超级兑币机。0/null：不是，1：是
     */
    private Boolean isAndroid;
    private Boolean isGate;
    /**
     * 已分配。0/null：不是，1：是
     */
    private Boolean isAllocated;

    /**
     * 产品funcId
     */
    private Integer productFuncId;

    /**
     * 参数类型：1、原有功能，2、自定义协议
     */
    private Integer funcType;

    /**
     * 功能名称
     */
    private String funcName;

    /**
     * 设置指令
     */
    private Integer setFunCode;

    private Boolean checked;

    private String mobile;
    private String officialAccountOpenId;
    private String appSecret;

    private Integer isInsertCoin;
    private Integer num;
    private String province;
    private String city;
    private String district;
    private String address;

    /**
     * 拼接字段，前端显示用
     */
    private String joinName;
    private List<DeviceVo> deviceVo;

    private Boolean fillInMemberInfo;
    /**
     * 预测当前串口主板的下一个账目上报的自增码
     */
    private Integer nextUploadAccountCode;

    private Integer drDeviceId;

    private Long commodityId;

    private String fileName;

    private List<DisplayRackItemVo> displayRackItemVoList;

    private BigDecimal retailPrice;
    /**
     * 参数名称
     */
    private String paramName;

    private List<DeviceVo> deviceSuccessList;
    private List<DeviceVo> deviceFailList;

    private Integer hierarchyTotal;
    private Integer freightLaneTotal;
    private Integer capacity;
    private Integer freightLaneCount;
    private Integer capacityCount;
    private Integer stockCount;
    private Integer scarceStock;

    private Long drId;
    /**
     * 缺货数
     */
    private Integer outOfStock;
    /**
     * 投币、出货、支付申请（失败、超时未回复）重试功能，0/null：不重试，1：重试
     */
    private Boolean retry;
    /**
     * 普通、超级兑币机出币（失败、超时未回复）重试功能，0/null：不重试，1：重试
     */
    private Boolean outCoinRetry;

    private Boolean commodityGroupSwitch;

    /**
     * 自动退款，0/null：不退，1：自动退
     */
    private Boolean autoRefund;

    /**
     * 购物车（暂时售货机用），0/null：不开，1：开启
     */
    private Boolean shoppingCart;

    /**
     * 购物车容量（暂时售货机用）
     */
    private Integer shoppingCartCapacity;

    /**
     * 商品展示类型：1、按货道顺序展示商品（同类商品不合并）
     * ，2、按商品排序展示，其实就是按商品合并展示
     */
    private Integer productDisplayType;

    /**
     * 售货机编号
     */
    private String salesDeviceNo;

    /**
     * 层级，如第一层、第二层
     */
    private Integer hierarchy;
    /**
     * 货道，如货道1、货道2
     */
    private Integer freightLane;

    private List<DeviceVo> aisleList = new ArrayList<>();

    private Integer laneNumber;

    private Boolean aisleStatus;

    /**
     * 前端已绑定门闸显示用
     */
    private String gateGateDeviceName;

    /**
     * 绑定门闸主键
     */
    private Integer cpdId;
    private String productKey;
    /**
     * 开机检查参数是否一致，0/null：不开，1：开启
     */
    private Boolean powerOnCheckParameter;

    private Integer feedback;
    /**
     * 登陆标识
     */
    private Integer loginId;
    /**
     * 接口对接的支付盒子。0/null：不是，1：是
     */
    private Boolean isApi;

    /**
     * 电机状态 1正常,2故障,3检测中
     */
    private Integer motorStatus;

    private int numberOfFailures;

    private String snCode;
    private Integer newlyIncreased;
    private Long memberId;

    private String socketId;

    private Integer deviceOnlineOfflineRecordType;
    /**
     * 存币存票机。0/null：不是，1：是
     */
    private Boolean isDepositCoinsAndBills;
    /**
     * 售货机。0/null：不是，1：是
     */
    private Boolean isVendmach;

    /**
     * 提供给前端使用：true-显示，false-不显示
     */
    private Boolean arrowDoubleShow;
    /**
     * 弹簧总层数量
     */
    private Integer springMachineHierarchyTotal;
    /**
     * H5是否强制用户填写用户信息  null/0不强制，1强制
     */
    private Boolean h5FillInMemberInfo;

    /**
     * 是否支持蓝牙
     */
    private Boolean isBluetooth;
    /**
     * 协议类型：1.汇联，2/null.乐摇摇，3.维码器
     */
    private Integer protocolType;

    /**支持WIFI网络，1：支持，0/null：不支持*/
    private Integer isWIfI;
    /**
     * 商品详情页，0/null.关闭，1.打开（暂时售货机用）
     */
    private Boolean commodityDetailSwitch;
    //是否展示售货机广告上传
    private boolean whetherToDisplayVendingMachine;

    //是否展示兑币机广告上传
    private boolean exhibitCurrencyExchangeMachine;

    private String salesmanId;

    private DeviceItem deviceItem;

    private List<DeviceItem> deviceItemList;

    private List<DeviceItemVo> deviceItemVoList;

    private Integer batteryNumber;
    private Boolean lightControl;
    private Boolean fanControl;
    private Integer temperatureControl;
    private Integer compressorStartingTemperature;
    private Integer compressorStopTemperature;

    private BigDecimal lockTime;



    /**   行线  0/null不设置 1 正  2 反 */
    private Integer hierarchySequence;
    /**   列线0/null不设置 1 正  2 反*/
    private Integer freightLaneSequence;
    /**   反馈0/null不设置 1 正  2 反*/
    private Integer reverseSequence;
    /**   反转线序，层当列用，列当层用（适配中吉）0/null不设置 1 正常线序  2 反转*/
    private Integer feedbackSequence;
    /**出货时间，默认4毫秒，售货机用的，超过这个时间售货机机器就会停止运行，光眼需要用到*/
    private Integer deliveryTime;
    private Integer compressorCurrentTemperature;

    private String lampStartupTime;
    private String lampStopTime;

    private Integer payLimitTime;
}
